<?php

class ARequisicionCompraDirecta {

    public function __construct() {
	}
	public function culminarRequerimiento(EFacade & $facade) 
	{	
		$docSA = & $facade->getDocumentRoot();
		$listaItems=$docSA->listaItems;
		$listaEquipos=$docSA->listaEquipos;
		$contE=count($listaEquipos);
		$cont=count($listaItems);
		$i=0;
		$j=0;
		foreach($listaItems as $prod)
		{
			if($prod->cantidadPendiente==0){
				$i=$i+1;
			}
		}
		foreach($listaEquipos as $e)
		{
			if($e->cantidadPendiente==0){
				$j=$j+1;
			}
		}
		//echo "<br>valor de i ",$i," ",$cont;
		//echo "<br>valor de j ",$j," ",$contE;
		if($i==$cont && $j==$contE){
			//echo "todos los productos solicitados";
			$workflowSA = & $facade->getWorkflow();
			//echo "<hr>workflowSA: ",$workflowSA;
			$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
			$role=NULL;
			$transSA = $transSetSA->getTransByName('t4');
			$facade->fireTrans($transSA,$role,'Culmina Requisicion', TRUE);
			//echo "<br>culmina con todos";
		}
		else{
			//echo "aun faltan items";
			$workflowSA = & $facade->getWorkflow();
			//echo "<hr>workflowSA: ",$workflowSA;
			$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
			$role=NULL;
			$transSA = $transSetSA->getTransByName('t5');
			$facade->fireTrans($transSA,$role,'Esperando Por todos los items', TRUE);
			//echo "<br>culmina sin todos";
		}
		
	}

		public function actualizaSolicitud(EFacade & $facade){
			
			$docRC = & $facade->getDocumentRoot();
			$workflow = & $facade->getWorkflow();
			$ezpdo_=getManager();
			
			$listaItems=$docRC->listaItems;
		 	$listaEquipos=$docRC->listaEquipos;
		 	
		 	$queryItems="FROM DSolicitudCompraDirecta as d WHERE d.listaProductos.contains(lis) and lis.itemSolicitado = ? AND lis.cantidadPendiente >0 order by d.fechaCreacion asc AND d.workflowRef.workPlaceList.contains(wp) AND wp.tokens == 1 AND wp.placeRef.name == 'p3'";
			$queryEquipos="FROM DSolicitudCompraDirecta as d WHERE d.listaEquipos.contains(lis) and lis.itemSolicitado = ? order by d.fechaCreacion asc AND d.workflowRef.workPlaceList.contains(wp) AND wp.tokens == 1 AND wp.placeRef.name == 'p3'";
			
			
			$solicitudADisparar=array();
			if($listaItems){
			foreach($listaItems as $l){
				
				$cantidadPendienteReq=$l->cantidadRequerida;
				$esperanza = $ezpdo_->Create('MEsperanzaItemRequisicion');
				$esperanza->cantidad=$cantidadPendienteReq;
				$esperanza->orden=$docRC;
				$l->producto->tipoProducto->descritoPor->esperanza[]=$esperanza;
				$esperanza->commit();
				
				
				
				$solicitud=$ezpdo_->find($queryItems, $l->producto);
				
				
				foreach($solicitud as $p){	
				    $disparo=FALSE;
				    
					foreach($p->listaProductos as $i){
					
						if($i->itemSolicitado->epGetObjectId()==$l->producto->epGetObjectId() and $i->cantidadPendiente>0 and $cantidadPendienteReq>0){
							
							if($cantidadPendienteReq>0){
								$cantidadPendienteSolicitud=$i->cantidadPendiente;
								$cantidadPendienteSolicitud2=$i->cantidadPendiente;
								//echo "<br>cantidad solicitada1",$cantidadPendienteSolicitud;
								$cantidadPendienteSolicitud-=$cantidadPendienteReq;
								if($cantidadPendienteSolicitud<0){
									$cantidadPendienteSolicitud=0;
								}
								//echo "<br>cantidad solicitada2",$cantidadPendienteSolicitud;
								$cantidadPendienteReq-=$cantidadPendienteSolicitud2;
								//echo "<br>cantidadRequerida antes",$cantidadPendienteReq;
								if($cantidadPendienteReq<0){
									$cantidadPendienteReq=0;
								}
								//echo "<br>cantidad requerida despues",$cantidadPendienteReq;
								$i->cantidadPendiente=$cantidadPendienteSolicitud;
								$i->commit();
								$disparo=TRUE;
							}	
						
						}
				
					}
					if($disparo==TRUE){
						
						
						$solicitudADisparar[$p->epGetObjectId()]=$p;
						
						
						
					}	
			}
				
				
			
			}
			
			}
		if($listaEquipos){
			foreach($listaEquipos as $l){
				
				$cantidadPendienteReq=$l->cantidadRequerida;
				//echo "<br><br>cantidadPendiente al comienzo",$cantidadPendienteReq;
				$solicitud=$ezpdo_->find($queryEquipos, $l->equipo);
				
				
				foreach($solicitud as $p){	
				    $disparo=FALSE;
				   
					foreach($p->listaEquipos as $i){
					
						if($i->itemSolicitado->epGetObjectId()==$l->equipo->epGetObjectId() and $i->cantidadPendiente>0 and $cantidadPendienteReq>0){
							
							if($cantidadPendienteReq>0){
								$cantidadPendienteSolicitud=$i->cantidadPendiente;
								$cantidadPendienteSolicitud2=$i->cantidadPendiente;
								//echo "<br>cantidad solicitada1",$cantidadPendienteSolicitud;
								$cantidadPendienteSolicitud-=$cantidadPendienteReq;
								if($cantidadPendienteSolicitud<0){
									$cantidadPendienteSolicitud=0;
								}
								//echo "<br>cantidad solicitada2",$cantidadPendienteSolicitud;
								$cantidadPendienteReq-=$cantidadPendienteSolicitud2;
								//echo "<br>cantidadRequerida antes",$cantidadPendienteReq;
								if($cantidadPendienteReq<0){
									$cantidadPendienteReq=0;
								}
								//echo "<br>cantidad requerida despues",$cantidadPendienteReq;
								$i->cantidadPendiente=$cantidadPendienteSolicitud;
								$i->commit();
								$disparo=TRUE;
							}	
						
						}
				
					}
					if($disparo==TRUE){
						
						
						$solicitudADisparar[$p->epGetObjectId()]=$p;
						
						
						
						
				}	
			}
				
				
			
			}
			
			}
			$solicitudesUnicas=array_unique($solicitudADisparar);
			
			foreach($solicitudesUnicas as$solicitud){
			
				$solicitud->requisiciones[]=$docRC;
				$facade->session->refresh($docRC );
				//echo "<br>antes del efacade";
				$newEfacade = & EFacade :: initWorkflowWithoutRole($facade->session, $solicitud, 3);
				//echo "<br>despues del efacade";
				$transSetS = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(), /* MTrans :: $TYPE_AUTO_PROCESS */ 3);
				//echo "<br>trnasSetS",$transSetS;
				$transS = $transSetS->getTransByName('t3');
				//echo "<br>trnasS",$transS;
				$usuario=NULL;
				$newEfacade->fireTrans($transS, $usuario, "Informar",TRUE);
				//echo "<br>sluego del firetrans";
				$p->epSetDirty(TRUE);
				$newEfacade->saveWorkflow();
				//echo "<br>sluego del salvar";
				$p->commit();
				
				unset($newEfacade);
				unset($newEfacade);
				$facade->session->evictAll('MEdge');
				$facade->session->evictAll('MTrans');
				$facade->session->evictAll('MPlace');
			}
			
			$docRC->epSetDirty(TRUE);
		 
			$workflowRC = & $facade->getWorkflow();
			$workflowRC->epSetDirty(TRUE);
			//echo "<br>",$workflowOP;
			
			$transSetRC = & EFacade :: getCurrentTransSetAuto($workflowRC, /* MTrans :: $TYPE_AUTO_AGENT */ 2);
			$listaWT= &$workflowRC->getWorkTransList();
	//		foreach ($listaWT as & $wt){
	//			echo "<br>la wt es: ",$wt;
	//			echo "<br>la t es: ",$wt->getTransRef();
	//		}
			$transRC = $transSetRC->getTransByName('t2');
	//		echo "<br>Termina el transOP",$transOP;
			$facade->fireTrans($transRC,$usuario,'Informar a la solicitud', TRUE);	
		
		
		
}
}
?>